package myjava.primitive_data;

public class Root {

   public static void main(String[] args) {

      // i  tipi primitivi sono tipi di dati assegnati per valore, infatti:
      int answer = 42;
      int answer2 = answer;
      answer++;
      System.out.println("answer : " + answer);
      System.out.println("answer2 : " + answer2);


      // # LISTA DEI TIPI PRIMITIVI - Primitive Data Type #

      // # NUMERI #
      // char
      char pdt1 = 'a';
      /* Nota uso delle virgolete singole.
       * Se usi le doppie diventa una stringa
       * char usa 2 byte e converte da numero a char in modo automatico (from 0 to 65536)
       * infatti: */
      pdt1 = 65535;
      System.out.println("char " + pdt1);


      /* # INTERI #
       *
       * ognuno dei tipi interi ha una capienza specifica definitta in byte
       * un byte sono 8 bit
       * un bit e' una scelta booleana 0 - 1
       * percio' un byte e' una mappa biunivoca di 2^8 stati su un codominio di qualsivolgia natura (quello numerico in questo caso)
       * la cardinalita' dell'insieme numeri degli int, tanto per fare un esempio, e' calcolata nel seguente modo:
       * (2^8) ^ 4 >> infatti int e' composto di 4 byte. Ne risutata un amappa di 4294967296 posti
       * va enuto presente che ci sono int positivi, negativi e lo ZERO!
       * percio il range numerico gestibile da tale mappa e' -2147483648 ... 0 ... +2147483647 */

      // int
      int pdt2 = 2147483647;	          // 4 byte : from -2147483648 to 2147483647 (4294967296 place holders)
      // long
      long pdt3 = 9223372036854775807L; // 8 byte : from -9223372036854775808L to 9223372036854775807L
      // short
      short pdt4 = 32767;	             // 2 byte : from : -32768 to 32767 (65536 place holders)
      // byte
      byte pdt5 = 127;	 	             // 1 byte : from -128 to 127 (256 placeholders)


      // # DECIMALI #

      // float
      float pdt6;	 			// 4 byte - 32bit
      // double
      double pdt7;			// 8 byte - 64bit


      // # BOOLEANI #

      boolean pdt8 = true;	// or false :)


      // ### MISCHIANDO PRIMITIVI E STRINGHE ###

      System.out.println("Rai" + 3);         // Rai3
      System.out.println(3 + 4 + 5);         // 12
      System.out.println("" + 3 + 4 + 5);    // 345
      System.out.println(4 + 5 + "pippo");   // 9pippo
      System.out.println(true + "pippo");    // truepippo
      System.out.println("Rai" + 3.12);      // Rai3.12


      // ### CONVERSIONE STRINGHE A TIPI PRIMITICI ###

      // ogni tipo primitivo ha una classe (e metodi statici)
      // associata che posso usare per fare conversioni a partire da stringhe
      byte parsed1 = Byte.parseByte("10");
      System.out.println(parsed1);
      boolean parsed2 = Boolean.parseBoolean("true");
      System.out.println(parsed2);
   }
}